package main

import (
	"fmt"
	"os"
)

func main() {
	/*流程控制
	条件控制：if eles else if
	选择控制 switch case select fallthrough
	循环控制 for for range
	跳转控制 goto break continue
	*/

	//条件控制
	if true {
		fmt.Println("true")
	} else if false {
		fmt.Println("false")
	} else {
		fmt.Println("other")
	}

	//if的另一种使用方法
	//if value,ok := courser["go"];ok {
	//	fmt.Println(value)
	//}

	//打开某一个文件不存在或者由于权限的问题无法操作
	if fileHandle,err := os.Open("hello.txt");err != nil {
		//null
		fmt.Println(fileHandle)
		fmt.Println(err.Error())
	} else {
		fmt.Println("获取文件成功")
	}

	if true && false {
		fmt.Println(1)
	} else {
		fmt.Println(2)
	}

	//选择控制 switch case select(后面讲解通道的时候讲)
	//break
	//fallthrough 穿透一级向下级执行
	switch switchVariables := 100; {
	case switchVariables >90:
		fmt.Println("成绩优秀")
		fallthrough
	case switchVariables>80:
		fmt.Println("成绩良好")
		fallthrough
	case switchVariables >=60:
		fmt.Println("成绩合格")
	default:
		fmt.Println("成绩不及格")
	}

	//if eles
	var switchVariables int = 100
	//if switchVariables > 100 {
	//
	//} else {
	//
	//}

	switch {
	case switchVariables > 90:
		fmt.Println("成绩优秀")
	case switchVariables > 80:
		fmt.Println("成绩良好")
	case switchVariables >=60:
		fmt.Println("成绩合格")
	default:
		fmt.Println("成绩不及格")
	}

	//switch判断头型
	var interfaceVariables interface{}
	var floatVariables = 3.1415926
	interfaceVariables = floatVariables
	switch typeVariables := interfaceVariables.(type) {
	case float32:
		fmt.Println("float32",typeVariables)
	case float64:
		fmt.Println("float64",typeVariables)
	case int8:
		fmt.Println("int8",typeVariables)
	default:
		fmt.Println("未知的类型",typeVariables)
	}

	//循环控制 for for range
	//for 初始化条件;循环的条件;变化的条件 {
	//
	//}
	for i :=0;i<10;i++ {
		fmt.Println(i)
	}

	initVariables := 1
	for initVariables < 10 {
		fmt.Print(initVariables)
		initVariables++
	}

	//死循环
	//for {
	//	fmt.Println(1)
	//}

	var stringVariables = "波哥，go语言体系课"
	for key,value := range stringVariables {
		//fmt.Println(key,value)
		fmt.Printf("key=%d,value=%c,类型=%T\n",key,value,value)
	}
	//跳转控制 goto break continue
	//gotoFunc()
	for i :=0;i<10;i++ {
		if i >6 {
			break
		}
		fmt.Println(i)
	}

//break的结果
//	for outerIndex :=0;outerIndex<10;outerIndex ++ {
//		for innerIndex :=0 ;innerIndex<6;innerIndex ++ {
//			fmt.Println(outerIndex,innerIndex)
//			break
//		}
//	}
	//break+退出标签
FORBREAK:	for outerIndex :=0;outerIndex<10;outerIndex ++ {
				for innerIndex :=0 ;innerIndex<6;innerIndex ++ {
					fmt.Println(outerIndex,innerIndex)
					break FORBREAK
				}
			}
		//continue 的结果
		for outerIndex :=0;outerIndex<3;outerIndex ++ {
			for innerIndex :=0 ;innerIndex<2;innerIndex ++ {
				fmt.Println(outerIndex,innerIndex)
				continue
				fmt.Println("这里是内层循环剩余的代码")
			}
		}
		fmt.Println("###########")
		//continue+标签执行的结果
FORCONTINUE:for outerIndex :=0;outerIndex<3;outerIndex ++ {
				for innerIndex :=0 ;innerIndex<2;innerIndex ++ {
					fmt.Println(outerIndex,innerIndex)
					continue FORCONTINUE
					fmt.Println("这里是内层循环剩余的代码")
				}
			}


}

func gotoFunc() {
	variables := 0
GOTO:
	fmt.Println(variables)
	variables++
	goto GOTO
}
